package com.regent.central.bill.repository;

import com.regent.central.bill.core.Clearance;
import com.regent.central.bill.dto.sale_order.SaleOrderDetailClearanceDTO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.math.BigDecimal;
import java.util.List;

@Repository
public interface ClearanceMapper extends Mapper<Clearance> {

    /**
     * 获取销售单的总核进金额
     *
     * @param saleOrderId 销售单ID
     * @return 该销售单的总核进金额
     */
    BigDecimal getClearanceInAmount(
            @Param("saleOrderId") String saleOrderId
    );

    /**
     * 获取销售单的总核出金额
     *
     * @param saleOrderId 销售单ID
     * @return 该销售单的总核出金额
     */
    BigDecimal getClearanceOutAmount(
            @Param("saleOrderId") String saleOrderId
    );

    /**
     * 获取销售单详情的核销记录列表
     *
     * @param saleOrderId 销售单ID
     * @return 销售单详情的核销记录列表
     */
    List<SaleOrderDetailClearanceDTO> getSaleOrderDetailClearances(
            @Param("saleOrderId") String saleOrderId
    );

    /**
     * 撤销核销记录
     *
     * @param clearanceId 核销记录ID
     */
    void cancel(
            @Param("clearanceId") String clearanceId,
            @Param("userCanceled") String userCanceled
    );

    /**
     * 更新核销记录的核销金额
     *
     * @param clearanceId 核销记录ID
     * @param amount      核销金额
     * @param userId      操作人ID
     */
    void update(
            @Param("clearanceId") String clearanceId,
            @Param("amount") BigDecimal amount,
            @Param("userId") String userId
    );

    /**
     * 获取销售单的核销记录
     *
     * @param saleOrderId 销售单ID
     * @param canceled    已撤销
     * @param deleted     已删除
     * @return 销售单的核销记录
     */
    List<Clearance> getSaleOrderClearances(
            @Param("saleOrderId") String saleOrderId,
            @Param("canceled") Boolean canceled,
            @Param("deleted") Boolean deleted
    );

}